#include "stdafx.h"
#include "StrValue.h"
#include "../Config.h"
#include "../CfgUtil.h"

using namespace pb::cfg;

StrValue::StrValue(Config* cfg, const std::string& name)
    : Value(cfg, name, eStr)
{
}

StrValue::~StrValue()
{
}

const std::string&
StrValue::data() const
{
    return m_data;
}

void
StrValue::data(const std::string& data)
{
    if (lengthOfData(data.size()))
    {
        m_data = data;
        m_cfg->onValueChanged();
    }
}

bool 
StrValue::loadData(std::fstream& in)
{
    // Length of data.
    unsigned int length = 0;
    if (!Util::loadLength(in, length) || !lengthOfData(length))
        return false;

    Buffer<char> bufData(length + 1);
    bufData[length] = '\0';
    in.read(bufData.data(), length);
    if (in.eof())
        return false;

    m_data = bufData.data();
    return true;
}

void 
StrValue::saveData(std::fstream& out)
{
    if (valid())
    {
        out.write(m_data.data(), m_data.size());
    }
}